#ifndef GPIO_I2C_H
#define GPIO_I2C_H

#include "Nano100Series.h"
#include "Common.h"
#include "I2c.h"

enum gpio_i2c_level_t {
	GPIO_I2C_LEVEL_L = 0,
	GPIO_I2C_LEVEL_H = 1
};

typedef void (*GpioI2cOpSetScl)(enum gpio_i2c_level_t value);
typedef enum gpio_i2c_level_t (*GpioI2cOpGetScl)(void);
typedef void (*GpioI2cOpSetSda)(enum gpio_i2c_level_t value);
typedef enum gpio_i2c_level_t (*GpioI2cOpGetSda)(void);

struct gpio_i2c_handle_t {
	GpioI2cOpSetScl op_set_scl;
	GpioI2cOpGetScl op_get_scl;
	GpioI2cOpSetSda op_set_sda;
	GpioI2cOpGetSda op_get_sda;
	uint32_t speed;
};

void GpioI2cInit(struct gpio_i2c_handle_t *gpio_i2c_handle,
				GpioI2cOpSetScl op_set_scl,
				GpioI2cOpGetScl op_get_scl,
				GpioI2cOpSetSda op_set_sda,
				GpioI2cOpGetSda op_get_sda,
				uint32_t speed);

int GpioI2cXfer(struct gpio_i2c_handle_t *gpio_i2c_handle,
				struct i2c_msg_t *i2c_msg);

#endif
